﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CamadasDados.Auditoria;

namespace CamadasDados.Cliente
{
    public class csCliente
    {

        DB_WORCAMENTO dbWorcamento = new DB_WORCAMENTO();

        Auditoria.csAuditoria metAudit = new csAuditoria();

        public void FecharConexao(object banco)
        {
            ((DB_WORCAMENTO)banco).Connection.Close();
        }

        public void InicializarConexao(object banco)
        {
            ((DB_WORCAMENTO)banco).Connection.Open();
        }

        public TB_CLIENTE Incluir(TB_CLIENTE objCliente)
        {
            try
            {
                InicializarConexao(dbWorcamento);
                dbWorcamento.AddToTB_CLIENTE(objCliente);
                dbWorcamento.SaveChanges();
            }
            catch (Exception e)
            {
                metAudit.IncluirLogErro(e.Message,"csCliente.cs","Incluir");
            }
            finally
            {
                FecharConexao(dbWorcamento);
            }

            return objCliente;
        }

        public void Alterar(TB_CLIENTE objCliente)
        {
            try
            {
                InicializarConexao(dbWorcamento);
                var objClienteDb = dbWorcamento.TB_CLIENTE.Where(q => q.CO_CLIENTE == objCliente.CO_CLIENTE).FirstOrDefault();
                objClienteDb.NO_CLIENTE = objCliente.NO_CLIENTE;
                objClienteDb.DS_EMAIL = objCliente.DS_EMAIL;
                objClienteDb.NR_STATUS = objCliente.NR_STATUS;
                objClienteDb.CO_CIDADE = objCliente.CO_CIDADE;
                objClienteDb.CO_TIPO_CLIENTE = objCliente.CO_TIPO_CLIENTE;
                objClienteDb.NR_CPF = objCliente.NR_CPF;
                objClienteDb.NR_CNPJ = objCliente.NR_CNPJ;
                dbWorcamento.SaveChanges();
            }
            catch (Exception e)
            {
                metAudit.IncluirLogErro(e.Message, "csCliente.cs", "Alterar");
            }
            finally
            {
                FecharConexao(dbWorcamento);
            }
        }

        public TB_CLIENTE AutorizarAcesso(string strLogin, string strSenha)
        {
            var objCliente = new TB_CLIENTE();
            try
            {
                InicializarConexao(dbWorcamento);
                objCliente = dbWorcamento.TB_CLIENTE.Where(q => q.DS_EMAIL == strLogin && q.DS_SENHA == strSenha).FirstOrDefault();
            }
            catch (Exception e)
            {
                metAudit.IncluirLogErro(e.Message, "csCliente.cs", "AutorizarAcesso");
            }
            finally
            {
                FecharConexao(dbWorcamento);
            }

            return objCliente;
        }

        public List<TB_TIPO_CLIENTE> ListaTipoCliente()
        {
            var listTipoCliente = new List<TB_TIPO_CLIENTE>();
            try
            {
                InicializarConexao(dbWorcamento);
                listTipoCliente = dbWorcamento.TB_TIPO_CLIENTE.Where(q => q.NR_STATUS == 1).OrderBy(q => q.NO_TIPO_CLIENTE).ToList();
            }
            catch (Exception e)
            {
                metAudit.IncluirLogErro(e.Message, "csCliente.cs", "ListaTipoCliente");
            }
            finally
            {
                FecharConexao(dbWorcamento);
            }

            return listTipoCliente;
        }

        public TB_TIPO_CLIENTE PegarTipoCliente(int intCodTipoCliente)
        {
            var objTipoCliente = new TB_TIPO_CLIENTE();
            try
            {
                InicializarConexao(dbWorcamento);
                objTipoCliente = dbWorcamento.TB_TIPO_CLIENTE.Where(q => q.CO_TIPO_CLIENTE == intCodTipoCliente).FirstOrDefault();
            }
            catch (Exception e)
            {
                metAudit.IncluirLogErro(e.Message, "csCliente.cs", "PegarTipoCliente");
            }
            finally
            {
                FecharConexao(dbWorcamento);
            }

            return objTipoCliente;
        }
    }
}
